'use strict';

// 一、基础题
// 1. 已知一个三角形的底为10，高为5，请尝试声明底和高两个变量，并求出这个三角形的面积，在控制台进行打印。
//  提示：三角形的面积=(底*高)/2

    var botton = 10;
    var hight = 5;

    console.log( "三角形的面积为：" +(botton * hight)/2 );

// 2. 请编写一个程序，可以求出1到100之间所有偶数的和，并在控制台打印。
    var sum = 0;    
    for(var i = 1 ; i <= 100 ; i++){       
        if( i % 2 == 0){           
            sum += i;
           
        }else{           
        }       
    }
       
    console.log(sum);


// // // 3. 请使用相关数学函数在1 ~ 10000随机取一个数，并在控制台打印。


function a(n){
    var b="";   
    for(var i=0;i<n;i++){
        b += Math.floor(Math.random()*10000);   
        return b;
}

}
    console.log(a(1));

// // 4. 请声明一个函数，传入参数为绩效分数score，根据如下规则进行判断并返回相关字符串：
// //  90~100：返回 考核等级S，奖励3倍工资
// //  80~89：返回 考核等级A，奖励2倍工资
// //  70~79：返回 考核等级B，奖励1倍工资
// //  60~69：返回 等级C，不奖励，需要继续努力
// //  0~59：返回 考核等级D，考核较差，需要再观察或者劝退


    function sco(score){
        if(score > 90 && score <= 100){
            console.log('考核等级S，奖励3倍工资');
        }else if(score > 80 && score <= 90){
            console.log('考核等级A，奖励2倍工资');
        }else if(score > 70 && score <= 80){
            console.log('考核等级B，奖励1倍工资');
        }else if(score >= 60 && score <= 70){
            console.log('等级C，不奖励，需要继续努力');
        }else{
            console.log('考核等级D，考核较差，需要再观察或者劝退');
        }
    }

        sco(100);


// // 5. 请声明一个函数，传入参数为正整数n，函数内计算n!，并返回结果。
// //  提示：请注意对参数进行校验。
// //  提示：n! = 1 * 2 * 3 * ... * n
    
function cheng(n){
    let chengji = 1;    
    for(let i = 1;i <= n;i++){
            chengji *= i;                       
        }
        return chengji;
}

    console.log(  '乘积为'+cheng(3));

// // 6. 请声明一个函数，传入参数为字符串str，在函数内移除str首尾空格，然后计算长度，并返回长度

function string(str){
    var s = str.trim();
    return s.length;
}

console.log('移除str首尾空格后长度为：' +string(' ss '));



// // // 7. 请声明一个匿名函数，传入参数为数组arr，在函数内对数组进行求和，并返回和。
// // //  调用这个函数，传入数组参数：[10,30,50,22]，打印函数返回结果
var a = function(arr){
    var sums = 0;
    for(var i = 0;i<arr.length;i++){
        sums += arr[i];       
    }
    return sums;
}

console.log('数组和：' + a([10,30,50,22]));




// // 8. 已知一个数组为：[ 1, 4, 3, 2 ]，
// //  请使用数组相关的方法检测元素 3 在数组中是否存在，
// //  存在则在控制打印出相应的下标，否则打印不存在。

function shuzu(arr2,item){
    for(let i=0;i<arr2.length;i++) {
        if(arr2[i] === item) {
            return arr2.indexOf(item);
        }        
    }
    return '不存在';
}

console.log(shuzu([ 1, 4, 3, 2 ],9));

var arr4 = [ 1, 4, 3, 2 ];
if(arr4.indexOf(3) !== -1){
    console.log(arr4.indexOf(3));
}else{
    console.log('不存在');
}



// // 9. 已知一个用户对象为：{id: 1, name: "庄周", desc: "辅助"}，
// //  请尝试声明一个变量表示上面这个对象，
// //  然后给这个对象增加一个性别属性，属性名称为：sex，属性值为：男。
// //  最后在控制台打印这个对象。
var user={
    id: 1,
    name: "庄周", 
    desc: "辅助"
}
console.log(user);



// // 10. 声明一个学生类，包含：姓名（name）、性别（gender）、生日字段（birthday）
// //  实例化一个学生对象，学生相关属性为：
// //      姓名：鬼谷子
// //      性别：男
// //      生日：2002-07-28
// //  实例化完成之后，在控制台打印这个对象。

function Student(name,gender,birthday){
    this.name = name;
    this.gender = gender;
    this.birthday = birthday;
}

// console.log(new Student('鬼谷子','男','2002-07-28'));

var guiguzi = new Student();
guiguzi.name = '鬼谷子';
guiguzi.gender = '男';
guiguzi.birthday = '2002-07-28';

console.log(guiguzi);





//  // 一、困难题
//  /* <!-- 第一题大题 --> */
//  //请利用构造函数定义Cat，并让所有的Cat对象有一个name属性，并共享一个方法say()，返回字符串'Hello, xxx!'：
//  function Cat(name) {
//     this.name = name;    
//  }

//  Cat.prototype.say = function () {
//     return `Hello, ${this.name}!`;
//   };

//  // 测试:
//  var kitty = new Cat('Kitty');
//  var doraemon = new Cat('哆啦A梦');
//  if (kitty && kitty.name === 'Kitty'
//      && kitty.say
//      && typeof kitty.say === 'function'
//      && kitty.say() === 'Hello, Kitty!'
//      && kitty.say === doraemon.say
//  ) {
//      console.log('测试通过!');
//  } else {
//      console.log('测试失败!');
//  }


//  /* <!-- 第二题大题 --> */
//  //按字符串顺序重新排序DOM节点：

//         var list =document.getElementById("test-list");
//         var arr = [];

//         for (let i = 0; i < list.children.length; i++){
//             arr.push(list.children[i]);
//         }
//         arr.sort(function(x, y){
//             if (x.innerText > y.innerText){
//                 return 1;
//             }else if (x.innerText < y.innerText){
//                 return -1;
//             }else {
//             	return 0;  
//             }
//         });
//         for (let i = 0; i < arr.length; i++){
//             list.appendChild(arr[i]);
//         }
//  // 测试:
//  (function () {
//     var
//         arr, i,
//         t = document.getElementById('test-list');
//     if (t && t.children && t.children.length === 6) {
//         arr = [];
//         for (i=0; i<t.children.length; i++) {
//             arr.push(t.children[i].innerText);
//         }
//         if (arr.toString() ===  ['ANSIC', 'CSS', 'DirectX','HTML','JavaScript','Swift'].toString()) {
//             console.log('测试通过!');
//         }
//         else {
//             console.log('测试失败: ' + arr.toString());
//         }
//     }
//     else {
//         console.log('测试失败!');
//     }
// })();






 /* <!-- 第三题大题 --> */
 // 选择<p>JavaScript</p>:
//  var js = document.getElementById('test-p');
//  // 选择<p>Python</p>,<p>Ruby</p>,<p>Swift</p>:
//  var arr =  document.getElementsByClassName('c-red')[1].getElementsByTagName('p');
//  // 选择<p>Haskell</p>:
//  var haskell = document.getElementsByClassName('c-green')[1].lastElementChild;
//  // 测试:
//  if (!js || js.innerText !== 'JavaScript') {
//      alert('选择JavaScript失败!');
//  } else if (!arr || arr.length !== 3 || !arr[0] || !arr[1] || !arr[2] || arr[0].innerText !== 'Python' || arr[1].innerText !== 'Ruby' || arr[2].innerText !== 'Swift') {
//      console.log('选择Python,Ruby,Swift失败!');
//  } else if (!haskell || haskell.innerText !== 'Haskell') {
//      console.log('选择Haskell失败!');
//  } else {
//      console.log('测试通过!');
//  }


 /* <!-- 第四题大题 --> */
 /* 使用jQuery选择器分别选出指定元素：
 + 仅选择JavaScript

 + 仅选择Erlang
 
 + 选择JavaScript和Erlang
 
 + 选择所有编程语言
 
 + 选择名字input
 
 + 选择邮件和名字input */
 
//  var selected = null;
//  //仅选择JavaScript
//   selected = $("#para-1");
//  //仅选择Erlang
//  selected = $(".color-red.color-green");
//  //选择JavaScript和Erlang
//  selected = $("#para-1,.color-red.color-green");
//  //选择所有编程语言
//  selected = $("p[class^=color-]");
//  //选择名字input
//  selected = $("p input[name=name]");
//  //选择邮件和名字input
//  selected = $("input[name=name],input[name=email]");
// // 高亮结果:
// if (!(selected instanceof jQuery)) {
//     //return console.log('不是有效的jQuery对象!');
// }
// $('#test-jquery').find('*').css('background-color', '');
// selected.css('background-color', '#ffd351');



//  /* <!-- 第五题大题 --> */
//  // 输入值后，用jQuery获取表单的JSON字符串，key和value分别对应每个输入的name和相应的value，例如：`{"name":"Michael","email":...}`
//  'use strict';
//  var json = null;
//  //val()取value属性值
// //text()取文本值
// var str3 = {};
// str3.name = $('input[name="name"]').val();
// str3.email= $('input[name="email"]').val();
// str3.password= $('input[name="password"]').val();
// str3.gender= $('input[type=radio]:checked').parent().text();//父元素lable的文本值
// str3.city= $('option:checked').text();
// json = JSON.stringify(str3);

//  if(typeof(json) === 'string'){
//      console.log(json);
//  }
//  else{
//      console.log('json变量不是string!');
//  }


//  /* <!-- 第六题大题 --> */
//  //除了列出的3种语言外，请再添加Pascal、Lua和Ruby，然后按字母顺序排序节点：


// var ul = $('#test-div ul');
// var arr = ['Pascal', 'Lua', 'Ruby'].map(e => '<li><span>' + e + '</span></li>');
// ul.append(arr);

// var li = ul.find('li');
// var sort = li.get().map(e => e.innerText).sort();
// li.get().map((e, i) => e.innerText = sort[i]);


// //测试
//  (function () {
//      var s = $('#test-div>ul>li').map(function () {
//          return $(this).text();
//      }).get().join(',');
//      if (s === 'JavaScript,Lua,Pascal,Python,Ruby,Swift') {
//          console.log('测试通过!');
//      } else {
//          console.log('测试失败: ' + s);
//      }
//  })();


//  /* <!-- 第七题大题 --> */
//  /* 
//  + 绑定合适的事件处理函数，实现以下逻辑：
//  + 当用户勾上“全选”时，自动选中所有语言，并把“全选”变成“全不选”；
//  + 当用户去掉“全不选”时，自动不选中所有语言；
//  + 当用户点击“反选”时，自动把所有语言状态反转（选中的变为未选，未选的变为选中）；
//  + 当用户把所有语言都手动勾上时，“全选”被自动勾上，并变为“全不选”；
//  + 当用户手动去掉选中至少一种语言时，“全不选”自动被去掉选中，并变为“全选”。
//   */
//  var
//      form = $('#test-form'),
//      langs = form.find('[name=lang]'),
//      selectAll = form.find('label.selectAll :checkbox'),
//      selectAllLabel = form.find('label.selectAll span.selectAll'),
//      deselectAllLabel = form.find('label.selectAll span.deselectAll'),
//      invertSelect = form.find('a.invertSelect');
//  // 重置初始化状态:
//  form.find('*').show().off();
//  form.find(':checkbox').prop('checked', false).off();
//  deselectAllLabel.hide();
//  // 拦截form提交事件:
//  form.off().submit(function (e) {
//      e.preventDefault();
//      alert(form.serialize());
//  });
//  // TODO:绑定事件
//  //全选


//  selectAllLabel.on('click',function(){
//      if(!selectAll.prop('checked')){

//         langs.prop({checked:true});
        
//         selectAllLabel.hide();

//         deselectAllLabel.show();
        
//      }else{
//         langs.prop({checked:false});
//      }

//  })

// //全不选
//  deselectAllLabel.on('click',function(){
//      if(!selectAll.prop('checked')){
//         langs.prop({checked:true});
//      }
//      else{
//         langs.prop({checked:false});
        
//         deselectAllLabel.hide();
    
//         selectAllLabel.show();
 
//     }
//  })
//  //反转，不完善
//   invertSelect.on('click',function () {
//      this.checked = !(this.checked);
//  })

// // 测试:
// console.log('请测试功能是否正常。');
// $(function(){
//     var
//       form = $('#test-form'),
//       langs = form.find('[name=lang]'),
//       selectAll = form.find('label.selectAll :checkbox'),
//       selectAllLabel = form.find('label.selectAll span.selectAll'),
//       deselectAllLabel = form.find('label.selectAll span.deselectAll'),
//       invertSelect = form.find('a.invertSelect');
   
//   // 重置初始化状态:
//   form.find('*').show().off();
//   form.find(':checkbox').prop('checked', false).off();
//   deselectAllLabel.hide();
//   // 拦截form提交事件:
//   form.off().submit(function (e) {
//       e.preventDefault();
//       alert(form.serialize());
//   });
     
//      selectAll.change(function(){
//       if(this.checked){
//         langs.prop('checked',true);
//         deselectAllLabel.show();
//         selectAllLabel.hide();
//       }else{
//         langs.prop('checked',false);
//         deselectAllLabel.hide();
//         selectAllLabel.show();
//       }
//      })
   
//      invertSelect.click(function(){
//       langs.each(function(){
//         if(this.checked){
//           $(this).prop('checked',false);
//         }else{
//           this.checked = true;
//         }
//       })
//      })
   
//      //alert(langs.length);
//      var count = 0,
//          len = langs.length;
//      langs.click(function(){
//       count = 0;
//       langs.each(function(){
//         if(this.checked)
//           count++;
//       })
//       if(count == len){
//         selectAll.prop('checked',true);
//         deselectAllLabel.show();
//         selectAllLabel.hide();
//       }else{
//           selectAllLabel.show();
//           deselectAllLabel.hide();
//           selectAll.prop('checked',false);
//       }
//      })
//   })